﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SistemaBastanteo.Persistencia;
using SistemaBastanteo.Dominio;
using NUnit.Framework;

namespace SistemaBastanteo.Pruebas
{
    public class Test08_ConsultarPoderes
    {
        IBastanteoDAO bastanteoDAO = null;
        IClienteDAO clienteDAO = null;
        IRepresentanteDAO representanteDAO = null;
        ITipoEmpresaDAO tipoEmpresaDAO = null;
        ITipoDocumentoDAO tipoDocumentoDAO = null;
        IPoderDAO poderDAO = null;

        TipoEmpresa tipoEmpresaCreado = null;
        Cliente clienteCreado = null;
        Representante representanteCreadoA = null;
        Representante representanteCreadoB = null;
        Representante representanteCreadoC = null;
        TipoDocumento tipoDocumentoCreado = null;
        Poder poderCreado1 = null;
        Poder poderCreado2 = null;
        Bastanteo bastanteoSF = null;
        Bastanteo bastanteoEC = null;



        [TestFixtureSetUp]
        public void InicializarPruebas()
        {
            tipoEmpresaDAO = new Persistencia.NH.TipoEmpresaDAO();
            clienteDAO = new Persistencia.NH.ClienteDAO();
            tipoDocumentoDAO = new Persistencia.NH.TipoDocumentoDAO();
            representanteDAO = new Persistencia.NH.RepresentanteDAO();
            poderDAO = new Persistencia.NH.PoderDAO();

            bastanteoDAO = new Persistencia.ADO.BastanteoDAO();


            tipoEmpresaCreado = tipoEmpresaDAO.Crear(new TipoEmpresa()
            {
                Abreviacion = "SAC"
            });

            clienteCreado = clienteDAO.Crear(new Cliente()
            {
                Ruc = "11020304052",
                RazonSocial = "Seguridad Rimac",
                Inicio = new DateTime(2001, 10, 10),
                Tipo = tipoEmpresaDAO.Obtener(tipoEmpresaCreado.Codigo),
                Empleados = 15
            });

            tipoDocumentoCreado = tipoDocumentoDAO.Crear(new TipoDocumento()
            {
                Descripcion = "DNI"
            });

            representanteCreadoA = representanteDAO.Crear(new Representante()
            {
                TipoDocumento = tipoDocumentoDAO.Obtener(tipoDocumentoCreado.Codigo),
                Documento = "41404714",
                Nombres = "Jenny Rosario",
                Apellidos = "Ponce Bravo",
                Cargo = "Supervisora",
                Grupo = "A",
                Cliente = clienteDAO.Obtener(clienteCreado.Codigo)
            });

            representanteCreadoB = representanteDAO.Crear(new Representante()
            {
                TipoDocumento = tipoDocumentoDAO.Obtener(tipoDocumentoCreado.Codigo),
                Documento = "07080772",
                Nombres = "Roller",
                Apellidos = "Bravo Gonzalez",
                Cargo = "Gerente",
                Grupo = "B",
                Cliente = clienteDAO.Obtener(clienteCreado.Codigo)
            });

            representanteCreadoC = representanteDAO.Crear(new Representante()
            {
                TipoDocumento = tipoDocumentoDAO.Obtener(tipoDocumentoCreado.Codigo),
                Documento = "41404714",
                Nombres = "Jennyfer",
                Apellidos = "Salazar Prado",
                Cargo = "Administradora",
                Grupo = "C",
                Cliente = clienteDAO.Obtener(clienteCreado.Codigo)
            });

            poderCreado1 = poderDAO.Crear(new Poder()
            {
                CodigoCorto = "CHCO",
                Descripcion = "Cobro de cheque",
                TipoProducto = "Activo"
            });

            poderCreado2 = poderDAO.Crear(new Poder()
            {
                CodigoCorto = "EFRET",
                Descripcion = "Retiro de efectivo",
                TipoProducto = "Activo"
            });


            bastanteoSF = bastanteoDAO.Generar(
                new Bastanteo()
                {
                    Cliente = clienteCreado,
                    Grupo = representanteCreadoA.Grupo,
                    Poder = poderCreado1,
                    Importe = 6500,
                    FechaLimite = new DateTime(2011, 11, 25),
                    TipoIntervencion = "A Sola Firma"
                },
                new List<Combinacion>() { });

                bastanteoSF = bastanteoDAO.Generar(
                new Bastanteo()
                {
                    Cliente = clienteCreado,
                    Grupo = representanteCreadoC.Grupo,
                    Poder = poderCreado1,
                    Importe = 6500,
                    FechaLimite = new DateTime(2011, 11, 25),
                    TipoIntervencion = "A Sola Firma"
                },
                new List<Combinacion>() { });


            bastanteoEC = new Bastanteo()
            {
                Cliente = clienteCreado,
                Grupo = representanteCreadoB.Grupo,
                Poder = poderCreado2,
                Importe = 4500,
                FechaLimite = new DateTime(2011, 11, 30),
                TipoIntervencion = "En Conjunto Con"
            };

            bastanteoEC = bastanteoDAO.Generar(bastanteoEC,
            new List<Combinacion>() 
            {
                new Combinacion()
                { 
                        Cliente=bastanteoEC.Cliente, 
                        Grupo = bastanteoEC, 
                        Poder = bastanteoEC.Poder,  
                        GrupoConjunto = representanteCreadoA.Grupo
                }
            });

        }

        [Test]
        public void Test1_ConsultarPoderesxGrupo()
        {

            //Ingresando los valores
            String Ruc = clienteCreado.Ruc;
            int codigoRep = representanteCreadoA.Codigo;
            String grupo = representanteCreadoA.Grupo;

            //Cantidad de Registros a Obtener 1
            ICollection<Bastanteo> lista;
            lista = bastanteoDAO.ConsultaPoderesGrupo(Ruc, codigoRep, grupo);
            Assert.IsNotNull(lista);

            Assert.AreEqual(1, lista.Count);

            //Cantidad de Registros a Obtener 0
            grupo = representanteCreadoB.Grupo;
            lista = bastanteoDAO.ConsultaPoderesGrupo(Ruc, codigoRep, grupo);
            Console.WriteLine(lista.Count);
            Assert.IsNotNull(lista);

            Assert.AreEqual(0, lista.Count);
     
        }
        [Test]
        public void Test2_ConsultarPoderesxTipo()
        {

            //Ingresando los valores
            String Ruc = clienteCreado.Ruc;
            int codigoRep = representanteCreadoA.Codigo;
            String tipo = "A Sola Firma";

            //Cantidad de Registros a Obtener 1
            ICollection<Bastanteo> lista;
            lista = bastanteoDAO.ConsultaPoderesTipo(Ruc, codigoRep, tipo);
            Assert.IsNotNull(lista);

            Assert.AreEqual(1, lista.Count);

            //Cantidad de Registros a Obtener 0
            tipo = "En Conjunto Con";
            lista = bastanteoDAO.ConsultaPoderesTipo(Ruc, codigoRep, tipo);
            Assert.IsNotNull(lista);

            Assert.AreEqual(0, lista.Count);

        }



        [TestFixtureTearDown]
        public void FinalizarPruebas()
        {
            foreach (Bastanteo bastanteo in bastanteoDAO.ListarTodos())
            {
                bastanteoDAO.Eliminar(bastanteo);
            }

            foreach (Representante representate in representanteDAO.ListarTodos())
                representanteDAO.Eliminar(representate);

            foreach (TipoDocumento tipoDocumento in tipoDocumentoDAO.ListarTodos())
                tipoDocumentoDAO.Eliminar(tipoDocumento);

            foreach (Cliente cliente in clienteDAO.ListarTodos())
                clienteDAO.Eliminar(cliente);

            foreach (TipoEmpresa tipoEmpresa in tipoEmpresaDAO.ListarTodos())
                tipoEmpresaDAO.Eliminar(tipoEmpresa);

            foreach (Poder poder in poderDAO.ListarTodos())
                poderDAO.Eliminar(poder);

            Persistencia.NH.NHibernateHelper.CerrarFabrica();
        }
        
    }
}